home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SPACE 1
/
SPACE - Library 1 - Volume 1.iso
/
program
/
363
/
xlisp20
/
readme.1st
< prev
next >
Wrap
Text File
|
1985-11-19
|
7KB
|
211 lines
This is a list of new features in XLISP version 2.0 so far.
>>>> Changes for T5:
Fixed some bugs in initialization and in the RESTORE function.
>>>> Changes for T4:
The special form PROGV was added to support establishing
dynamically scoped variables.
The symbols *ERROR-OUTPUT* and *DEBUG-IO* have been added and
are bound to streams that are used for error output and debug
i/o respectively.
The symbol *GC-HOOK* has been added. If it is bound to a function
of two arguments, that function will be called after the garbage
collector runs. The two parameters are the total number of nodes
and the number free after the garbage collection.
A bug in the handling of *GC-FLAG* has been fixed. It sometimes
caused symbols that were 'under construction' during a call to
the garbage collector to get corrupted.
>>>> Changes for T3:
The following symbols preserve a history of values used by the
read-eval-print loop:
- the current input expression
+ the last expression read
++ the previous value of +
+++ the previous value of ++
* the result of the last evaluation
** the previous value of *
*** the previous value of **
Changed the default value of *print-case* to :upcase.
Added macros to xlisp.ini for:
(defvar sym &optional val)
(defparameter sym val)
(defconstant sym val)
Macintosh specific T3 changes:
Fixed a bug in the EXP function.
>>>> Changes for T2:
The global symbol *PRINT-CASE* was added to control the output case of
symbols. Its default value is :DOWNCASE which will cause symbols to
be printed in lowercase. You can change it to :UPCASE to get symbols
to print in uppercase (as they did in previous XLISP releases).
*BREAKENABLE* will again override ERRSET to make it possible to debug
programs that use ERRSET. I changed this behavior for T1, but have
since reconsidered due to some input from an XLISP user.
I have added the functions FIRST, SECOND, THIRD, FOURTH and REST as
synonyms for CAR, CADR, CADDR, CADDDR and CDR.
I fixed a bug in the reader which caused strange results to occur when
reading a list with an embedded comment.
Macintosh specific T2 changes:
Added the function (COMMAND-POINT-SIZE <n>) to set the point size for the
text in the command window. The default point size is now 9.
Fixed a bug in the RANDOM function.
>>>> Changes for T1:
The most important change from version 1.7 to 2.0 of XLISP is that
it is now possible to save XLISP's workspace between sessions. This
feature is used by the XLISP system to avoid having lots of initialization
data stored in the XLISP executable image itself. For this reason,
the XLISP executable, by itself, is only capable of evaluating two special
forms. These forms are DEFINE-SUBR and DEFINE-FSUBR. In order to
initialize XLISP, it is necessary to have the executable image and the
file "xlisp.ini". This file defines all of the built-in functions and
special forms and writes out a default workspace file called "xlisp.wks".
To start from scratch with these two files (and possibly a file called
"osdefs.ini" with system specific definitions), remove any existing copy
of "xlisp.wks" from the current directory, then start the XLISP executable
image. It should read in the file "xlisp.ini" and write the file
"xlisp.wks". After the initial workspace "xlisp.wks" has been created,
the initialization file "xlisp.ini" is no longer needed. From then on,
XLISP will read the file "xlisp.wks" during initialization, followed by
"init.lsp".
The &key lambda list keyword is now supported as are initialization forms
for &optional, &key and &aux parameters. The supplied-p variables are
also supported for &optional and &key parameters.
(save filename)
(restore filename)
(defstruct symbol [slot-def]...)
(subseq string start [end])
(open name &key :direction)
(vector [expr]...)
(block name [expr]...)
(return-from name [value])
(tagbody [tag|expr]...)
(psetq [sym value]...)
(flet ([sym lambda-list [body]...]...) [expr]...)
(labels ([sym lambda-list [body]...]...) [expr]...)
(macrolet ([sym lambda-list [body]...]...) [expr]...)
(unwind-protect expr [expr]...)
(when test [expr]...)
(unless test [expr]...)
(loop [expr]...)
(pprint expr [stream])
(string< str1 str2 &key :start1 :end1 :start2 :end2)
(string= str1 str2 &key :start1 :end1 :start2 :end2)
(string> str1 str2 &key :start1 :end1 :start2 :end2)
(string<= str1 str2 &key :start1 :end1 :start2 :end2)
(string/= str1 str2 &key :start1 :end1 :start2 :end2)
(string>= str1 str2 &key :start1 :end1 :start2 :end2)
(string-lessp str1 str2 &key :start1 :end1 :start2 :end2)
(string-equal str1 str2 &key :start1 :end1 :start2 :end2)
(string-greaterp str1 str2 &key :start1 :end1 :start2 :end2)
(string-not-greaterp str1 str2 &key :start1 :end1 :start2 :end2)
(string-not-equal str1 str2 &key :start1 :end1 :start2 :end2)
(string-not-lessp str1 str2 &key :start1 :end1 :start2 :end2)
(string-trim bag string)
(string-left-trim bag string)
(string-right-trim bag string)
(string-upcase string &key :start :end)
(string-downcase string &key :start :end)
(nstring-upcase string &key :start :end)
(nstring-downcase string &key :start :end)
(symbol-function sym)
(send obj msg [expr]...)
(send-super msg [expr]...)
(integerp expr)
(floatp expr)
(stringp expr)
(arrayp expr)
(streamp expr)
(objectp expr)
(fboundp expr)
These symbols control the format in which numbers are printed. They
should be set to printf format strings.
*integer-format* (default is "%d" or "%ld")
*float-format* (default is "%g")
(substr string start [length]) is replaced by:
(subseq string start [end])
(openi name) is replaced by: (open name :direction :input)
(openo name) is replaced by: (open name :direction :output)
OPEN and LOAD take strings as file names, symbols are no longer
accepted.
ERRSET overrides *BREAKENABLE* and traps errors rather than entering
the break loop.
The LAMBDA special form has been removed.
Symbols have two value cells, one for normal values and one for
function values. SETQ sets the normal value, DEFUN sets the
functional value.
The SEND-SUPER function replaces the :SENDSUPER message to objects.
All messages must be sent using either the SEND function or the
SEND-SUPER function. In other words, the syntax:
(Class :new '(a b c))
must now be written as:
(send Class :new '(a b c))
and
(self :sendsuper :msg 1 2 3)
must now be written as:
(send-super :msg 1 2 3)
This is because the CAR of a form is no longer evaluated. To get the
effect of having the function position evaluated, use the FUNCALL form.
The syntax of LOAD has changed from:
(load name [verbose-flag [print-flag]])
to:
(load name &key :verbose :print)
əəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəə